<?php

Yii::import('application.modules.nutricion.models._base.BaseMedidaAlimento');

class MedidaAlimento extends BaseMedidaAlimento {

    /**
     * @return MedidaAlimento
     */
    public static function model($className = __CLASS__) {
        return parent::model($className);
    }

    public static function label($n = 1) {
        return Yii::t('app', 'Porci&oacute;n de Alimento|Porciones de Alimentos', $n);
    }

    /**
     * Scoop que permite recuperar la medida de un alimento
     * @author Sofía Mejía <asmejia@utn.edu.ec>
     * @param int $alimentos_id del alimento seleccionado
     * @return \MedidaAlimentoS
     */
    public function de_alimento_id($alimentos_id) {
        $this->getDbCriteria()->mergeWith(
                array(
                    'condition' => 't.alimentos_id=:alimentos_id',
                    'params' => array(
                        ':alimentos_id' => $alimentos_id,
                    )
                )
        );
        return $this;
    }

    /**
     * Busca si la tabla del modelo no esta vacia
     * @author Sofia Mejia <asmejia@utn.edu.ec>
     * @return query
     */
    public function contarDatos() {
        $command = Yii::app()->db->createCommand()
                ->select("count(id) as total")
                ->from($this->tableName());
        $result = $command->queryAll();
        return $result[0]['total'];
    }

    /**
     * @return array customized attribute labels (name=>label)
     */
    public function attributeLabels() {
        return array(
            'alimentos_id' => Yii::t('app', 'Alimentos'),
            'cantidad' => Yii::t('app', 'Cantidad (g)'),
            'medida_cacera' => Yii::t('app', 'Medida Cacera'),
            'alimentos' => null,
        );
    }

    public function rules() {
        return array_merge(parent::rules(), array(
            array('cantidad', 'uniqueMedidaAlimento'),
        ));
    }

    /**
     * Regla que valida que no se repita la medida para ese alimento
     * @author Mauricio Chamorro <mrchamorro@utn.edu.ec>
     * @param type $attribute
     * @param type $params
     */
    public function uniqueMedidaAlimento($attribute, $params) {
        if (!empty($this->attributes['cantidad']) && $attribute == "cantidad") {
            if ($this->attributes['cantidad']) {
                $bool = $this->obtenerTodasMedidasAlimento($this->attributes['alimentos_id'], $this->attributes['cantidad']);
                if ($bool == true) {
                    $this->addError($attribute, 'Ya existe esta medida para este alimento');
                }
            }
        }
    }

    /**
     * Funcion que compara las medidas del alimento evaluando si ya existen
     * @param int $id id del alimento
     * @param String $porcion porcion engramos de la medida
     * @return boolean true: ya existe, false: es nuevo
     */
    public function obtenerTodasMedidasAlimento($id, $porcion) {
        $medidas = MedidaAlimento::model()->findAll(array('condition' => 'alimentos_id=:alimentos_id', "params" => array(':alimentos_id' => $id)));
        if ((float) $porcion == 100) {
            return true;
        }
        foreach ($medidas as $value) {
            if ((float) $value->cantidad == (float) $porcion) {
                return true;
            }
        }
        return false;
    }

}
